﻿using Newtonsoft.Json;
using System.Net.Http;

namespace DotNetStar.OpenSDK.WeChat.MP
{
    /// <summary>
    /// 表示微信公众号的接口请求 api 基类。
    /// </summary>
    /// <typeparam name="TResponse">响应结果类型，必须派生自 <see cref="WeChatApiResponse" /> 基类。</typeparam>
    /// <seealso cref="OpenSDK.ApiRequest{TResponse}" />
    public abstract class WeChatMPApiRequest<TResponse>:ApiRequest<TResponse> where TResponse:WeChatApiResponse
    {
        /// <summary>
        /// 使用 access_token 初始化 <see cref="WeChatMPApiRequest{TResponse}"/> 类的新实例。
        /// </summary>
        /// <param name="requestUrl">请求的 api 连接。</param>
        /// <param name="accessToken">微信公众号的令牌字符串。</param>
        public WeChatMPApiRequest(string requestUrl, string accessToken) : base(requestUrl) => this.AccessToken = accessToken;


        /// <summary>
        /// 获取认证令牌凭据字符串。
        /// </summary>
        [ArgumentName("access_token")]
        public string AccessToken { get; }

        /// <summary>
        /// 处理自定义请求结果的回调。
        /// </summary>
        /// <param name="httpResponse">Http 请求响应的 <see cref="T:System.Net.Http.HttpResponseMessage" /> 实例。</param>
        /// <returns>
        /// 自定义的处理结果。
        /// </returns>
        public override TResponse ResponseHandler(HttpResponseMessage httpResponse) => JsonConvert.DeserializeObject<TResponse>(httpResponse.GetContentAsString());
    }
}
